#include<stdio.h>
#include<stdbool.h>
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;  
    BinTree Right; 
};

BinTree Build(int *in,int *post,int n){//第一个参数是中序序列的起始位置,第二个参数是后序序列的起始位置,n是长度 
	if(n <= 0)//如果长度小于等于0,直接返回即可 
		return NULL;
	int *p = in;//定义一个指向in的指针 
	while(p){//找到根节点在中序中的位置 
		if(*p == *(post + n - 1))
			break;
		p++;
	}
	BinTree T = (BinTree)malloc(sizeof(struct TNode));
	T->Data = *p;
	int len = p - in;
	T->Left = Build(in,post,len);
	T->Right = Build(p + 1,post + len,n - len - 1);
	return T; 
}
//先序遍历
void PreorderTraversal(BinTree BT)
{
    if(BT){
        printf("%d",BT->Data);
        PreorderTraversal(BT->Left);
        PreorderTraversal(BT->Right);
    }
}
int main(){
	int n;
    int post[31],in[31];
	BinTree T;//只需要定义,不需要赋值->[BiTree T = new BiTNode;] 
	scanf("%d",&n);
	for(int i = 0;i < n;i++)
		scanf("%d",&post[i]);
	for(int i = 0;i < n;i++)
		scanf("%d",&in[i]);
	T = Build(in,post,n);
	printf("Preorder:");
	PreOrder(T);
	return 0;
}
//根据后序和中序遍历输出先序遍历 